# 基础
"""

假设有一个初始字符串 `s = "Hello, Python world!"`，进行下面的操作：
"""
"""
 1. 字符串长度计算
"""
# s = "Hello,Python World!"
# count = len(s)
# print(count)
"""
 2. 计算字符串中"o"字符的个数
"""
# o_count = s.count('o')
# print(o_count)
"""
 3. 将字符串转换为大写
"""
# big_write = s.upper()
# print(big_write)

"""
 3. 将字符串转换为小写
"""
# small_write = s.lower()
# print(small_write)
"""
5. 查找"Python"在字符串中的位置
"""
# find_python = s.find("Python")
# print(find_python)
"""
 6. 替换字符串中的"world"为"universe"
"""
# replace_world = s.replace("World","universe")
# print(replace_world)
""""
7. 检查字符串是否以"Hello"开始
"""
# hello_begin = s.startswith("Hello")
# print(hello_begin)
"""
 8. 检查字符串是否以"!"结尾
"""
# tail = s.endswith("!")
# print(tail)
"""
9. 以","为分隔符，拆分字符串
"""
# split = s.split(",")
# print(split)
"""
10. 去除字符串首尾的"!"
"""
# strip = s.strip("!")
# print(strip)
"""
11.字符串反转
"""
# reverse_str = s[::-1]
# print(reverse_str)
"""
12.字符串切片，获取python
"""
# get_python = s[6:12]
# print(get_python)
"""
13.将字符串s中的hello删除
"""
# del_hello = s.replace("Hello","")
# print(del_hello)
"""
 14. 拼接两个字符串 "Hello," 和 "World!"
"""
# s1 = "Hello,"
# s2 = "World!"
# print(s1 + s2)
"""
 15. 使用f-string合并字符串和数字2021
"""
# num = 2021
# f_string = f"{s}{num}"
# print(f_string)
"""
 16. 找出'a'第一次出现的位置
"""
# first_a = s.find("a")
# print(first_a)
""""
 17. 找出'e'最后一次出现的位置
"""
# end_e = s.rfind("e")
# print(end_e)
"""
 18. 计算字符串中空格的数量
"""
# count_Space = s.count(" ")
# print(count_Space)
"""
 19. 使用循环遍历字符串中的每个字符
"""
# for i in s:
    # print(i)

"""
 20. 将字符串转为"列表"形式，每个字符为一个列表元素
"""
# list_s = list(s)
# print(list_s)
"""
 21. 字符串排序（提示：先转换为列表）
"""
# list_s = list(s)
# sort_s = ''.join(list_s)
# print(sort_s)
"""
22.判断字符串是否为数字
"""
# is_num = s.isdigit()
# print(is_num)
"""
 23. 将列表 `['Hello,', 'Python', 'World!']` 使用空格连接为一个字符串
 """
# list1 = ['Hello','Python','World!']
# link_list1 = ' '.join(list1)
# print(link_list1)
"""
 24. 使用%操作符格式化字符串，将数字100插入到"Number: "后面
 """
# str_re = "Nymber:%d" % 100
# print(str_re)
"""
 25. 检查字符串是否全部为小写字母
 """
# small_str = s.islower()
# print(small_str)
"""
 26. 检查字符串是否全部为大写字母
 """
# big_str = s.isupper()
# print(big_str)
"""
 27. 将数字列表 `[1, 2, 3]` 转换成字符串，元素之间用`-`连接
 """
# num = [1,2,3]
# num_str = '-'.join(map(str,num))
# print(num_str)
"""
 28. 找出字符串中所有的"o"的位置
 """
# o = []
# for i ,j in enumerate(s):
#     if j == 'o':
#         o.append(i)
# print(o)
"""
 29. 替换字符串中的第一个"o"为"O"
 """
# replace_o = s.replace('o','0',1)
# print(replace_o)
"""
 30. 字符串插入操作，向字符串指定位置插入子字符串"amazing "
"""
# position = 6
# insert_str = s[::position] + "amazing"
# print(insert_str)


# 进阶
s = "Python is great!"

"""
1. 字符串反转: 给定字符串`s = "Python is great!"`，不使用任何内置函数，编写代码以反转字符串。
"""
# print(s[::-1])
"""
2. 字符计数: 对于同一个字符串`s`，计算字符 `t'` 在其中出现的次数。
"""
# t_count = s.count("t")
# print(t_count)
"""
3. 替换字符: 把字符串`s` 中的所有空格替换成下划线 ``。
"""
# replace = s.replace(" ","_")
# print(replace)
"""
4. 检查回文:
 检查字符串`s2 = "A man, a plan, a canal, Panama!"` 
 在忽略大小写、标点和空格的情况下是否为回文字符串。
"""
# import string
# s2 = "A man,a plan,a canal,Panama!"
# lower = s2.lower()
# ignore = []
# for i in lower:
#     if i not in string.punctuation and not i.isspace():
#         ignore.append(i)
# i_str = ''.join(ignore)
#
# is_back = i == i[::-1]
# print(is_back)

"""
5. 子字符串查找: 在`s` 中查找第一次出现子字符串 `is"` 的位置。
"""
# find = s.find("is")
# print(find)
"""
6. 字符串插入: 在`s` 中第一个 `t'` 字符之后插入子字符串`"_inserted"`。
"""
# first_t = s.find("t")
# if first_t != -1:
#     insert = s[:first_t + 1] + "_inserted" + s[first_t:]
#     print(insert)
# else:
#     print("字符串中没有找到't'字符")
"""
7. 部分替换: 替换`s` 中第一次出现的 `great"` 为 `awesome"`。
"""
# replace = s.replace("great","awesome",1)
# print(replace)
"""
8. 切片与拼接: 
将`s` 切分为两部分，
其中第一部分包含前半部分的字符，第二部分包含后半部分的字符，
然后将这两部分以相反顺序拼接起来。
"""
# length = len(s)
# mid = (length + 1) // length
#
# ahead = s[:mid]
# tail = s[mid:]
#
# result = tail + ahead
# print(result)

"""
9. 创建字符串列表: 
使用列表生成式，根据字符串`s` 创建一个列表，
其中包含`s` 的每个单词的首字母大写形式。
"""
# ll = [word.capitalize() for word in s.split()]
# print(ll)

"""
10. 字符替换加密: 
编写一个函数`encrypt`，
使用字典 `a: m, b: n, ... z: l}` 
的对应规则加密字符串`s3 = "encryption"`。
"""
s3 = "encryption"
def encrypt(a):
    mapping = {
        'a':'m', 'b':'n', 'c':'o', 'd':'p', 'e':'q', 'f':'r',
        'g':'s', 'h':'t', 'i':'u', 'j':'v', 'k':'w', 'l':'x',
        'm':'y', 'n':'z', 'o':'a', 'p':'b', 'q':'c', 'r':'d',
        's':'e', 't':'f', 'u':'g', 'v':'h', 'w':'i', 'x':'j',
        'y':'k', 'z':'l'
    }
    encrypted = ''.join([mapping[i] for i in a if i in mapping])
    return  encrypted

print(s3)
print(encrypt(s3))